package main

import "fmt"

func main() {
	//如果数组值已经提前知道了，那么可以通过 数组常量 的方法来初始化数组，而不用依次使用 []= 方法（所有的组成元素都有相同的常量语法）。
	var a = [5]int{1, 2, 3, 4, 5}
	fmt.Printf("type of a is %T\n", a)
	//固定长度、数组赋值会发生拷贝；数组的内存分配是连续的，适合性能要求较高的场景；
	//类型严格：[5]int 和 [6]int 是不同类型，数组的类型包括长度和元素类型。
	for i := 0; i < len(a); i++ {
		fmt.Printf("value at %d is %d\n", i, a[i])
	}
	//自动推断长度：编译器会根据数组中的元素数量自动计算出数组的长度，所以你不需要显式指定长度。
	var b = [...]int{5, 6, 10, 22, 62}
	fmt.Printf("type of b is %T\n", b)
	for i := 0; i < len(b); i++ {
		fmt.Printf("value at %d is %d\n", i, b[i])
	}
	//返回的切片
	var c = []int{1, 2, 3, 4, 5}
	fmt.Printf("type of c is %T\n", c)
	//切片动态长度，底层依然是数组,切片可以使用append，支持自动扩容
	c = append(c, 6)
	for i := 0; i < len(c); i++ {
		fmt.Printf("value at %d is %d\n", i, c[i])
	}
	var arrKeyValue = [5]string{3: "Chris", 4: "Ron"}
	for i := 0; i < len(arrKeyValue); i++ {
		fmt.Printf("Person at %d is %s\n", i, arrKeyValue[i])
	}
	var arrKeyValue2 = []string{3: "Chris", 4: "Ron"} //注：初始化得到的实际上是切片slice
	for i := 0; i < len(arrKeyValue2); i++ {
		fmt.Printf("Person at %d is %s\n", i, arrKeyValue2[i])
	}

}
